{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# General import\n",
    "import numpy as np\n",
    "import scipy.sparse as sparse\n",
    "from scipy.integrate import ode\n",
    "import time\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# pyMPC and kalman import\n",
    "from pyMPC.mpc import MPCController\n",
    "from pyMPC.kalman import kalman_design_simple, LinearStateEstimator"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## System dynamics ##\n",
    "\n",
    "The system to be controlled is an inverted pendulum on a cart (see next Figure).  \n",
    "\n",
    "<img src=\"img/cart_pole.png\" width=\"250\" align=\"center\"/>\n",
    "\n",
    "The system is governed by the following differential equations:\n",
    "\n",
    "\\begin{equation}\n",
    " \\begin{aligned}\n",
    " (M+m)\\ddot p + ml\\ddot\\phi \\cos\\phi - ml \\dot \\phi ^2 \\sin \\phi + b\\dot p &= F \\\\\n",
    " l \\ddot \\phi + \\ddot p \\cos \\phi - g \\sin\\phi &= -f_\\phi\\dot \\phi\n",
    "\\end{aligned}\n",
    "\\end{equation}\n",
    "\n",
    "Introducing the state vector $x=[p\\; \\dot p\\; \\phi\\; \\dot \\phi]$ and the input $u=F$, the system dynamics are described in state-space by a set of an nonlinear ordinary differential equations: $\\dot x = f(x,u)$ with\n",
    "\n",
    "\\begin{equation}\n",
    "\\begin{split}\n",
    "  f(x,u) &= \n",
    " \\begin{bmatrix}\n",
    " x_2\\\\\n",
    " \\frac{-mg \\sin x_3\\cos x_3 + mlx_4^3\\sin x_3 + f_\\phi m x_4 \\cos x_3 - bx_2 + u }{M+(1-\\cos^2 x_3)m}\\\\\n",
    " x_3\\\\\n",
    " \\frac{(M+m)(g \\sin x_3 - f_\\phi x_4) - (lm x_4^2 \\sin x_3 - bx_2 + u)\\cos x_3}{l(M+(1-\\cos^2 x_3)m)}\n",
    " \\end{bmatrix}\\\\ \n",
    " \\end{split}\n",
    " \\end{equation}\n",
    "\n",
    "For MPC control design, the system is linearized about the upright (unstable) equilibrium point, i.e., about the point $x_{eq} = [0, \\; 0\\;, 0,\\; 0]^\\top$.\n",
    "The linearized system has form $\\dot  x =  A_c x + B_c u$ with\n",
    "\n",
    "\\begin{equation}\n",
    "  A = \n",
    " \\begin{bmatrix}\n",
    " 0& 1& 0& 0\\\\\n",
    " 0& -\\frac{b}{M}& -g\\frac{m}{M}& f_\\theta\\frac{m}{M}\\\\\n",
    " 0&0&0&1\\\\\n",
    " 0&\\frac{b}{Ml}& \\frac{g(M+m)}{Ml}&-\\frac{(M+m)f_\\theta}{M l}\n",
    " \\end{bmatrix},\\qquad B= \n",
    " \\begin{bmatrix}\n",
    " 0\\\\\n",
    " \\frac{1}{M}\\\\\n",
    " 0\\\\\n",
    " -\\frac{1}{Ml}&\n",
    " \\end{bmatrix}\n",
    " \\end{equation}\n",
    " \n",
    "Next, the system is discretized with sampling time $T_s = 10\\;\\text{ms}$. Here we just use a Forward Euler dsicretization scheme for the sake of simplicity."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Constants #\n",
    "\n",
    "M = 0.5\n",
    "m = 0.2\n",
    "b = 0.1\n",
    "ftheta = 0.1\n",
    "l = 0.3\n",
    "g = 9.81\n",
    "\n",
    "Ts = 10e-3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# System dynamics: \\dot x = f_ODE(t,x,u)\n",
    "\n",
    "def f_ODE(t,x,u):\n",
    "    F = u\n",
    "    v = x[1]\n",
    "    theta = x[2]\n",
    "    omega = x[3]\n",
    "    der = np.zeros(4)\n",
    "    der[0] = v\n",
    "    der[1] = (m * l * np.sin(theta) * omega ** 2 - m * g * np.sin(theta) * np.cos(theta) + m * ftheta * np.cos(theta) * omega + F - b * v) / (M + m * (1 - np.cos(theta) ** 2))\n",
    "    der[2] = omega\n",
    "    der[3] = ((M + m) * (g * np.sin(theta) - ftheta * omega) - m * l * omega ** 2 * np.sin(theta) * np.cos(theta) - (F - b * v) * np.cos(theta)) / (l * (M + m * (1 - np.cos(theta) ** 2)))\n",
    "    return der"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Linearized System Matrices \n",
    "\n",
    "Ac =np.array([[0, 1, 0, 0],\n",
    "               [0, -b / M, -(g * m) / M, (ftheta * m) / M],\n",
    "               [0, 0, 0, 1],\n",
    "               [0, b / (M * l), (M * g + g * m) / (M * l), -(M * ftheta + ftheta * m) / (M * l)]])\n",
    "\n",
    "Bc = np.array([\n",
    "    [0.0],\n",
    "    [1.0 / M],\n",
    "    [0.0],\n",
    "    [-1 / (M * l)]\n",
    "])\n",
    "\n",
    "Cc = np.array([[1., 0., 0., 0.],\n",
    "               [0., 0., 1., 0.]])\n",
    "\n",
    "Dc = np.zeros((2, 1))\n",
    "\n",
    "[nx, nu] = Bc.shape  # number of states and number or inputs\n",
    "ny = np.shape(Cc)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Simple forward euler discretization\n",
    "\n",
    "Ad = np.eye(nx) + Ac * Ts\n",
    "Bd = Bc * Ts\n",
    "Cd = Cc\n",
    "Dd = Dc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Standard deviation of the measurement noise on position and angle\n",
    "\n",
    "std_npos = 0.005\n",
    "std_nphi = 0.005"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Reference input and states\n",
    "xref = np.array([0.3, 0.0, 0.0, 0.0])  # reference state\n",
    "uref = np.array([0.0])  # reference input\n",
    "uminus1 = np.array([0.0])  # input at time step negative one - used to penalize the first delta u at time instant 0. Could be the same as uref."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Constraints\n",
    "xmin = np.array([-10.0, -10.0, -100, -100])\n",
    "xmax = np.array([10.0, 10.0, 100, 100])\n",
    "\n",
    "umin = np.array([-20])\n",
    "umax = np.array([20])\n",
    "\n",
    "Dumin = np.array([-5])\n",
    "Dumax = np.array([5])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Objective function weights\n",
    "Qx = sparse.diags([1.0, 0, 5.0, 0])  # Quadratic cost for states x0, x1, ..., x_N-1\n",
    "QxN = sparse.diags([1.0, 0, 5.0, 0])  # Quadratic cost for xN\n",
    "Qu = 0.0 * sparse.eye(1)  # Quadratic cost for u0, u1, ...., u_N-1\n",
    "QDu = 0.1 * sparse.eye(1)  # Quadratic cost for Du0, Du1, ...., Du_N-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Initialize simulation system\n",
    "\n",
    "phi0 = 15*2*np.pi/360\n",
    "x0 = np.array([0, 0, phi0, 0]) # initial state\n",
    "t0 = 0\n",
    "system_dyn = ode(f_ODE).set_integrator('vode', method='bdf')\n",
    "system_dyn.set_initial_value(x0, t0)\n",
    "_ = system_dyn.set_f_params(0.0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Prediction horizon\n",
    "Np = 150\n",
    "Nc = 75"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Instantiate and initialize MPC controller\n",
    "K = MPCController(Ad, Bd, Np=Np, Nc=Nc, x0=x0, xref=xref, uminus1=uminus1,\n",
    "                  Qx=Qx, QxN=QxN, Qu=Qu, QDu=QDu,\n",
    "                  xmin=xmin, xmax=xmax, umin=umin, umax=umax, Dumin=Dumin, Dumax=Dumax)\n",
    "K.setup()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Basic Kalman filter design\n",
    "Q_kal = np.diag([0.1, 10, 0.1, 10])\n",
    "R_kal = np.eye(ny)\n",
    "L,P,W  = kalman_design_simple(Ad, Bd, Cd, Dd, Q_kal, R_kal, type='filter')\n",
    "x0_est = x0\n",
    "KF = LinearStateEstimator(x0_est, Ad, Bd, Cd, Dd,L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Simulate in closed loop\n",
    "[nx, nu] = Bd.shape  # number of states and number or inputs\n",
    "len_sim = 10  # simulation length (s)\n",
    "nsim = int(len_sim / Ts)  # simulation length(timesteps)\n",
    "x_vec = np.zeros((nsim, nx))\n",
    "y_vec = np.zeros((nsim, ny))\n",
    "y_meas_vec = np.zeros((nsim, ny))\n",
    "y_est_vec = np.zeros((nsim, ny))\n",
    "x_est_vec = np.zeros((nsim, nx))\n",
    "x_ref_vec = np.zeros((nsim, nx))\n",
    "u_vec = np.zeros((nsim, nu))\n",
    "t_MPC_CPU = np.zeros((nsim,1))\n",
    "t_vec = np.arange(0, nsim) * Ts\n",
    "\n",
    "time_start = time.time()\n",
    "\n",
    "x_step = x0\n",
    "x_step_est = x0\n",
    "t_step = t0\n",
    "\n",
    "uMPC = uminus1\n",
    "for i in range(nsim):\n",
    "    # Output for step i\n",
    "    # System\n",
    "    y_step = Cd.dot(system_dyn.y)  # y[i] from the system\n",
    "    ymeas_step = y_step\n",
    "    ymeas_step[0] += std_npos * np.random.randn()\n",
    "    ymeas_step[1] += std_nphi * np.random.randn()\n",
    "    # Estimator\n",
    "    # MPC\n",
    "    uMPC = K.output()  # u[i] = k(\\hat x[i]) possibly computed at time instant -1\n",
    "\n",
    "    # Save output for step i\n",
    "    y_vec[i, :] = y_step  # y[i]\n",
    "    y_meas_vec[i, :] = ymeas_step  # y_meas[i]\n",
    "    x_vec[i, :] = system_dyn.y  # x[i]\n",
    "    y_est_vec[i, :] = KF.y  # \\hat y[i|i-1]\n",
    "    x_est_vec[i, :] = KF.x  # \\hat x[i|i-1]\n",
    "    x_ref_vec[i, :] = xref #xref_fun(t_step)\n",
    "    u_vec[i, :] = uMPC  # u[i]\n",
    "\n",
    "    # Update to i+1\n",
    "    # System\n",
    "    system_dyn.set_f_params(uMPC)  # set current input value to uMPC\n",
    "    system_dyn.integrate(system_dyn.t + Ts)  # integrate system dynamics for a time step\n",
    "\n",
    "    # Kalman filter: update and predict\n",
    "    KF.update(ymeas_step)  # \\hat x[i|i]\n",
    "    KF.predict(uMPC)  # \\hat x[i+1|i]\n",
    "\n",
    "    # MPC update for step i+1\n",
    "    time_MPC_start = time.time()\n",
    "    K.update(KF.x, uMPC)  # update with measurement (and possibly pre-compute u[i+1])\n",
    "    t_MPC_CPU[i] = time.time() - time_MPC_start\n",
    "\n",
    "    # Time update\n",
    "    t_step += Ts\n",
    "\n",
    "time_sim = time.time() - time_start"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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x9Gdf/7Bc7du7Xse6+Hi46uPxTk4/fTA4pfKKQmrR3Jy4NZbvyMmZiCNGxs33TSPq68O9p4eERGpTzp29E37TZzo/7EdOvgmiSxKwuqJoiK46qo15OUNpEWLfXz66TxOPbWSf69ERESkXlASVg+YwW23bWPBggto3LiIjIx5nHrqqV6HJSIiIrWgJKwemDKlmH/84zIaNNjAhx9m0KNHD69DEhERkVpSElYP3HfffcCnPPfcTM48M9gxiEVERCSSNPA6AKne1KmfkJv7F04//VeMGDHc63BEREQkRJSERbC9e/cybtz1QGeeffZRr8MRERGRENLlyAj2+ONPUlS0liFD3qNHj2qeUSIiIiL1jlrCItSWLVt44IEHgIsYMuR8r8MRERGREFMSFqFuuun35OcX4Nwk0tK8jkZERERCTUlYBHruuWW88cY/cO5m7rmnG0lJXkckIiIioaY+YRHGzBg5cjzQjOnTf89113kdkYiIiISDkrAIM2PGHOBjOnV6kmuvbeF1OCIiIhImuhwZQfbu3cs999wBJPP88zfSQLUjIiJy1FJLWAR57LGn+OmntbRo8Q5nnRXjdTgiIiISRmpriRBTpmzmnnvuBy7kvvsuJCrK64hEREQknNQSFgHM4LbbJmBWyFNPPc7NN3sdkYiIiISbWsIiwOzZn1Fa+jznn38nN998itfhiIiISB1QEuaxr77ax6WX3gx05PbbJ3odjoiIiNQRXY702IQJzwBL6dnzVfr3b+x1OCIiIlJHlIR5aOXKzWRk3Evz5ueRmTkE57yOSEREROqKLkd6aPjwuzAr5KGHnsIpAxMRETmmKAnzyLx588jMnEnz5hO48UZ1xhcRETnWKAnzQHFxMWPHjiUq6iR+/vN7vA5HREREPKA+YR74298eYdWqVcBcLr003utwRERExANqCatja9b8wL33PgBcRpMmv2TwYK8jEhERES8oCatj1133a3xv+6O8/z401qgUIiIixyRdjqxDH3/8MQsW/Bf4CyNHduT0072OSERERLxSYxLmnDsLGAEMANoBhcAK4G1gppntCmuER4mysjLuuus3REefQN++t/Gvf3kdkYiIiHip2iTMOfcOsBGYDTwIbAHigFOAgcBs59zfzWxOuAOt71599VWWLFkMPM+oUXFehyMiIiIeq6kl7Boz23bYunxgSfn0iHOuVVgi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jhwZouh8wtkSdjqwxsy+N7Ni4GXgksP2uQR4rnz+VeAXrrqLtnXod797GjDuvvtqEvXcbhEREQmxcHbMbw+sr7CcAxzeuerAPma2zzm3C2gJbAtjXNVavPhbrr/+Tb7//mngCkaP7upVKCIiIhKEpKQkVqxYcci6Sy+9lB9++OGQdffddx+XXnppXYZ2iHpxd6RzbjQwGqBt27ZkZGSE7Vz/+EcW33//OPALfvazP/D11+E7lwQmPz8/rHUvwVG9RB7VSWQ6luolMTGRvLw8r8M4xPPPP3/EutLS0pDGWVRUFFAdhzMJ2wB0rLDcoXxdZfvkOOeigUQg9/CCzGwaMA0gNTXV0tPTwxEvAGeddRadOqXyi1/0Iz0dnEsO27kkMBkZGYSz7iU4qpfIozqJTMdSvWRlZdGkSZNqh4WIBHl5eSQkhObmOzMjLi6O3r17+31MOPuEfQWc7Jzr5JyLBa4E5hy2zxzg2vL5ocDHZmZhjKlGDRs25Nxz9zBwoO+JCSIiIhKYuLg4cnNz8fgrvc6YGbm5ucTFxQV0XNhawsr7eN0CvAdEAf80s2+cc/cDi8xsDjAdeME5twbYji9RExERkXqsQ4cO5OTksHXrVq9DqVZRUVHAiVNV4uLi6NChQ0DHhLVPmJnNBeYetu73FeaLgMvDGYOIiIjUrZiYGDrVg4cuZ2RkBHT5MNQ0Yr6IiIiIB5SEiYiIiHhASZiIiIiIB1x9u3PBObcV+DHMp2mFhwPGSpVUL5FJ9RJ5VCeRSfUSeeqiTk40s9aVbah3SVhdcM4tMrNUr+OQQ6leIpPqJfKoTiKT6iXyeF0nuhwpIiIi4gElYSIiIiIeUBJWuWleByCVUr1EJtVL5FGdRCbVS+TxtE7UJ0xERETEA2oJExEREfGAkjARERERDygJExEREfGAkjARERERDygJExEREfGAkjARERERDygJExEREfGAkjARERERDygJExEREfGAkjARERERDygJExEREfGAkjARERERDygJExEREfGAkjARERERDygJExEREfGAkjARERERDygJExEREfGAkjARERERDygJExEREfGAkjARERERDygJExEREfGAkjARERERDygJExEREfGAkjARERERDygJExEREfGAkjARERERD0R7HUCgWrVqZUlJSWE9x549e2jcuHFYzyGBU71EJtVL5FGd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\n",
      "text/plain": [
       "<Figure size 720x720 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot results\n",
    "\n",
    "fig, axes = plt.subplots(3, 1, figsize=(10, 10), sharex=True)\n",
    "axes[0].plot(t_vec, x_est_vec[:, 0], \"b\", label=\"p_est\")\n",
    "axes[0].plot(t_vec, x_vec[:, 0], \"k\", label='p')\n",
    "axes[0].plot(t_vec, x_ref_vec[:,0], \"r--\", linewidth=4, label=\"p_ref\")\n",
    "axes[0].set_ylabel(\"Position (m)\")\n",
    "\n",
    "axes[1].plot(t_vec, x_est_vec[:, 2] * 360 / 2 / np.pi, \"b\", label=\"phi_est\")\n",
    "axes[1].plot(t_vec, x_vec[:, 2] * 360 / 2 / np.pi, label=\"phi\")\n",
    "axes[1].plot(t_vec,  x_ref_vec[:,2] * 360 / 2 / np.pi, \"r--\", linewidth=4, label=\"phi_ref\")\n",
    "axes[1].set_ylabel(\"Angle (deg)\")\n",
    "\n",
    "axes[2].plot(t_vec, u_vec[:, 0], label=\"u\")\n",
    "axes[2].plot(t_vec, uref * np.ones(np.shape(t_vec)), \"r--\", linewidth=4, label=\"u_ref\")\n",
    "axes[2].set_ylabel(\"Force (N)\")\n",
    "\n",
    "for ax in axes:\n",
    "    ax.grid(True)\n",
    "    ax.legend()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Histogram of the MPC CPU time\n",
    "\n",
    "fig,ax = plt.subplots(1,1, figsize=(5,5))\n",
    "ax.hist(t_MPC_CPU*1000, bins=100)\n",
    "ax.grid(True)\n",
    "_ = ax.set_xlabel('MPC computation CPU time (ms)')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "metadata": {
     "collapsed": false
    },
    "source": []
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
